package material;

import commands.Command;

/**
 * Thread destine a gerer l'execution d'une commande dans le temps.
 */
public interface CommandThrower extends Runnable {

	/**
	 * Change la commande executee par le thread.
	 * @param command	La nouvelle commande
	 */
	public void setCommand(Command command);
	
	/**
	 * Renvoie la commande executee par le thread.
	 * @return	la commande executee par le thread
	 */
	public Command getCommand();
	
	/**
	 * Change la periode s'ecoulant entre deux executions de la commande.
	 * @param timer	La nouvelle periode s'ecoulant entre deux executions de la commande
	 */
	public void setTimer(float timer);
	
	/**
	 * Desactive l'execution de la commande.
	 */
	public void stopCommand();
	
	/**
	 * Rend vrai si l'execution de la commande est activee.
	 * @return vrai si l'execution de la commande est activee, faux sinon
	 */
	public boolean isActive();

	/**
	 * Change le delai apres lequel la commande sera executee.
	 * @param time	Le nouveau delai apres lequel la commande sera executee
	 */
	public void setTime(float time);
	
}
